﻿using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.UI;
using System.Web.UI.WebControls;
using System.Xml;
using Core.Library;
using DataObject;
using DataObject.Customer;

namespace KMT.Pages.Customer
{
    public partial class Register : System.Web.UI.Page
    {
        protected void Page_Load(object sender, EventArgs e)
        {
            rfvFullname.ErrorMessage        = "(*) - Nhập họ tên";            
            rfvRPassword.ErrorMessage       = "(*) - Nhập mật khẩu";
            rfvRRePassword.ErrorMessage     = "(*) - Nhập xác nhận mật khẩu";
            rfvAddress.ErrorMessage         = "(*) - Nhập địa chỉ";
            rfvPhone.ErrorMessage          = "(*) - Nhập số điện thoại";
            rfvEmail.ErrorMessage           = "(*) - Nhập địa chỉ hòm thư";
            revEmail.ErrorMessage           = "(*) - Hòm thư sai";
            rfvCaptchaControl.ErrorMessage  = "(*) - Nhập mã xác nhận";

            Page.Title = string.Format(".: Đăng ký {0} :.", Constants.SITE_TITLE);    
        }

        #region Buttons

        protected void BtnRegister(object sender, EventArgs e)
        {
            try
            {
                // Kiểm tra mật khẩu
                if (txtPassword.Text != txtRePassword.Text)
                {
                    ltMessage.Text = MessageUtility.ShowMessage(string.Empty, "Mật khẩu và xác nhận mật khẩu không khớp.", MessageType.Warning);
                    return;
                }

                // Kiểm tra đã tồn tại số điện thoại?
                if (CustomerController.Customer_CheckMobileExist(txtMobile.Text) > 0)
                {
                    ltMessage.Text = MessageUtility.ShowMessage(string.Empty, "Tên đăng nhập này đã được sử dụng. Bạn vui lòng chọn tên khác.", MessageType.Information);
                    return;
                }

                // Kiểm tra đã tồn tại hòm thư?            
                if (CustomerController.Customer_CheckEmailExist(txtEmail.Text) > 0)
                {
                    ltMessage.Text = MessageUtility.ShowMessage(string.Empty, "Email này đã được đăng kí. Nếu bạn quên mật khẩu thì hãy sử dụng chức năng \"Quên mật khẩu?\" và một mật khẩu mới sẽ được gửi cho bạn.", MessageType.Information);
                    return;
                }

                // Kiểm tra mã xác nhận            
                var inputSecurityCode = txtCaptchaControl.Text;

                if (Session["SecuritySession"].ToString() != inputSecurityCode)
                {
                    ltMessage.Text = MessageUtility.ShowMessage(string.Empty, "Mã xác nhận không chính xác.", MessageType.Warning);
                    return;
                }

                // Tạo người dùng mới
                var customer = new CustomerObject
                {
                    ContactName  = txtFullName.Text.Trim(),
                    Username     = UnicodeUtility.UnicodeToKoDauAndGach(txtFullName.Text.Trim().ToLower()),
                    Password     = SecurityUtility.MD5Encrypt(txtPassword.Text.Trim()),
                    Mobile       = txtMobile.Text,
                    Email        = txtEmail.Text,
                    Address      = txtAddress.Text,
                    IsNewsletter =  cbNewsletter.Checked,
                    IsActive     = true,
                };

                var customerId = CustomerController.Customer_Create(customer);
                if (customerId > 0)
                {
                    // Đăng ký thành công gửi mail kích hoạt tài khoản
                    var o = CustomerController.Customer_GetById(customerId);
                    if (o != null)
                        SendActiveMail(o.ContactName, o.Username, o.Email, o.Mobile, txtPassword.Text.Trim());                    
                }
            }
            catch
            {
                ltMessage.Text = MessageUtility.ShowMessage(string.Empty, "Đăng ký không thành công. Xin vui lòng quay lại sau", MessageType.Failure);
            }
        }

        protected void BtnReset(object sender, EventArgs e)
        {
            txtFullName.Text    = string.Empty;            
            txtPassword.Text    = string.Empty;
            txtRePassword.Text  = string.Empty;
            txtAddress.Text     = string.Empty;
            txtMobile.Text      = string.Empty;
            txtEmail.Text       = string.Empty;
        }

        #endregion

        #region Send Active Mail

        private void SendActiveMail(string contactName, string username, string email, string mobile, string password)
        {
            var doc = new XmlDocument();
            doc.Load(Server.MapPath("App_Data/Active.xml"));
            var node = doc.SelectSingleNode("emails/email[@id='Active']");

            // Set info from xml file in to email   
            var childNode = node.SelectSingleNode("subject");

            // Subject: ...
            var subject = string.Format("Thông tin đăng ký - www.kmt.vn");
            // Body: ...
            childNode = node.SelectSingleNode("body");
            var body = childNode.InnerText;

            body = body.Replace("[Subject]", subject);
            body = body.Replace("[ContactName]", contactName);

            body = body.Replace("[Mobile]", mobile);
            body = body.Replace("[Username]", username);
            body = body.Replace("[Password]", password);

            var checkMail = MailUtility.Send(email, subject, body);
            if (checkMail)
                ltMessage.Text = MessageUtility.ShowMessage(string.Empty, "Đăng ký thành công. Thông tin tài khoản của bạn đã được gửi vào hòm thư " + email, MessageType.Success);                
        }

        #endregion
    }
}